Conditional Types
型Aが型Bのサブタイプかどうかで条件的に型を表現する記法
1つの解釈だけど、型のパターンマッチだと思っているodiak.icon
infer Tで新しい型変数を生むことができて、?以降で使える
概要
T extends S ? U : Vのように書く
TがSに代入可能な型(TがSの部分型であり、S型の変数にT型の値を代入することができる)ならばU、そうでない場合はVが評価される
注意すべき点は、TがUnion Typesの場合はTを構成する型それぞれに上の操作が適用されるということである 下のコードで、TはArray<number | string>ではなく、Array<number> | Array<string>になる
code:example.ts
type Wrap<T> = T extends number | string ? Array<T> : T
type T = Wrap<number | string>;
つまり、Wrap<number | string>はWrap<number> | Wrap<string>と等価である